package com.rljk.common.controller;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.rljk.common.result.CodeMsg;
import com.rljk.common.result.Result;
import com.rljk.exception.GlobalException;
import com.rljk.redis.RedisService;
import com.rljk.utils.Const;
import com.rljk.utils.CookieUtil;
import com.rljk.utils.Tools;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


/** 
 * 类名称：登录验证码
 * 类描述： 
 * 联系方式：
 * @version
 */
@Controller
@RequestMapping("/code")
@Slf4j
public class SecCodeController {

	@Autowired
	RedisService redisService;

	@RequestMapping("/getcode")
	public void generate(HttpServletResponse response,HttpServletRequest request){
//		String fkey = request.getParameter("FKEY");
//		System.out.println("fkey"+fkey);

		//if (Tools.checkKey("YANZHENGMA", fkey)) {
			log.info("创建验证码");

            String uuid = Tools.uuid();
            CookieUtil.set(response,Const.SESSION_SECURITY_CODE,uuid,180);


        ByteArrayOutputStream output = new ByteArrayOutputStream();
			String code = drawImg(output);
			if(redisService.get(uuid)!=null){
				redisService.del(uuid);
			}
			redisService.setex(uuid,code,180);
			try {
				ServletOutputStream out = response.getOutputStream();
				output.writeTo(out);
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		//}
	}
	
	private String drawImg(ByteArrayOutputStream output){
		String code = "";
		for(int i=0; i<4; i++){
			code += randomChar();
		}
		//int width = 70;
		//int height = 25;
		int width = 180;
		int height = 50;
		BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
		//Font font = new Font("Times New Roman",Font.PLAIN,20);
		Font font = new Font("Times New Roman",Font.PLAIN,40);
		Graphics2D g = bi.createGraphics();
		g.setFont(font);
		//Color color = new Color(66,2,82);
		Color color = new Color(255,255,255);
		g.setColor(color);
		//g.setBackground(new Color(226,226,240));
		g.setBackground(new Color(0,0,0,0));
		g.clearRect(0, 0, width, height);
		FontRenderContext context = g.getFontRenderContext();
		Rectangle2D bounds = font.getStringBounds(code, context);
		double x = (width - bounds.getWidth()) / 2;
		double y = (height - bounds.getHeight()) / 2;
		double ascent = bounds.getY();
		double baseY = y - ascent;
		g.drawString(code, (int)x, (int)baseY);
		g.dispose();
		try {
			ImageIO.write(bi, "jpg", output);
		} catch (IOException e) {
			//e.printStackTrace();
		}
		return code;
	}
	
	private char randomChar(){
		Random r = new Random();
		String s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789";
		return s.charAt(r.nextInt(s.length()));
	}
}
